// 封装request请求（完善版，保留原有核心逻辑）
export default function(config) {
  // 1. 处理默认参数：避免未传时出现undefined
  const requestConfig = {
    method: config.method || 'GET', // 默认GET请求
    header: config.header || {},    // 默认空请求头（避免覆盖用户自定义header）
    data: config.data || {},        // 默认空数据
    ...config                       // 用户传的config覆盖默认值
  };

  // 2. 若本地有token，添加到Authorization请求头（保留原有token逻辑）
  const mytoken = wx.getStorageSync('token');
  if (mytoken) {
    // 注意：若依后端默认需要 "Bearer " 前缀（空格必须有），这里补充避免认证失败
    requestConfig.header.Authorization = requestConfig.header.Authorization || `Bearer ${mytoken}`;
  }

  // 3. 打印请求头（保留原有调试逻辑）
  console.log("即将发送的请求头：", requestConfig.header);
  console.log("即将发送的请求地址：", "http://localhost:8080" + requestConfig.url);

  // 4. 显示加载提示（新增：提升用户体验，避免用户重复点击）
  wx.showLoading({
    title: config.loadingText || '加载中...', // 支持自定义加载文字
    mask: true // 遮罩防止背景点击
  });

  // 5. 支持Promise链式调用（新增：兼容.then()/.catch()，同时保留原有success回调）
  return new Promise((resolve, reject) => {
    wx.request({
      // 拼接请求地址（7410保留原有基础路径）
      url: "http://localhost:8080" + requestConfig.url,
      method: requestConfig.method,
      data: requestConfig.data,
      header: requestConfig.header,

      // 保留原有success回调逻辑（如果用户传了success，先执行用户的回调）
      success: (res) => {
        // 先执行用户传入的success（如果有）
        if (typeof requestConfig.success === 'function') {
          requestConfig.success(res);
        }
        // 再将结果传给Promise的resolve（支持链式调用）
        resolve(res);
      },

      // 新增错误处理（避免请求失败无反馈）
      fail: (err) => {
        // 错误提示（用户可自定义错误文字，默认"请求失败"）
        wx.showToast({
          title: config.errorText || '请求失败，请稍后重试',
          icon: 'none',
          duration: 1500
        });
        // 执行用户传入的fail回调（如果有）
        if (typeof requestConfig.fail === 'function') {
          requestConfig.fail(err);
        }
        // 将错误传给Promise的reject（支持链式调用）
        reject(err);
      },

      // 新增请求完成回调（无论成功/失败，都关闭加载提示）
      complete: () => {
        wx.hideLoading(); // 关闭加载提示，避免遮罩残留
      }
    });
  });
}